package com.cdtu.comon;

import com.cdtu.exception.AddCertifyException;
import com.cdtu.exception.FileNotFoundException;
import com.cdtu.exception.UserException;
import com.cdtu.vo.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import java.sql.SQLIntegrityConstraintViolationException;

/**
 * @author : Sakura
 * @Date : 2023/3/15 10:48
 */

@ControllerAdvice(annotations = {RestController.class, Controller.class}) //表示拦截哪些类型的controller注解
@ResponseBody
@Slf4j
public class GlobalExceptionHandler {
    @ExceptionHandler(SQLIntegrityConstraintViolationException.class)
    public R<String> exceptionHandle(SQLIntegrityConstraintViolationException exception){
//        log.error(exception.getMessage()); //报错记得打日志
        if (exception.getMessage().contains("Duplicate entry")){
            //获取已经存在的用户名，这里是从报错的异常信息中获取的
            String[] split = exception.getMessage().split(" ");
            String msg = split[2] + "这个用户名已经存在";
            return R.error(msg);
        }
        return R.error("未知错误");
    }

    @ExceptionHandler(NullPointerException.class)
    public R<String> exceptionHandle(NullPointerException exception){
        log.error(exception.getMessage()); //报错记得打日志
        //这里拿到的message是业务类抛出的异常信息，我们把它显示到前端
        return R.error("数据处理异常，请联系管理员");
    }

    @ExceptionHandler(UserException.class)
    public R<String> UserExceptionHandle(UserException exception){
        log.error(exception.getMessage()); //报错记得打日志
        if (exception instanceof AddCertifyException){
            return R.error(exception.getMessage());
        }
        //这里扩展自己的异常类，可以选择抛出异常
        //这里拿到的message是业务类抛出的异常信息，我们把它显示到前端
        return R.error(exception.getMessage());
    }
    @ExceptionHandler(FileNotFoundException.class)
    public R<String> FileNotFoundExceptionHandle(FileNotFoundException exception){
        log.error(exception.getMessage()); //报错记得打日志
        //这里扩展自己的异常类，可以选择抛出异常
        //这里拿到的message是业务类抛出的异常信息，我们把它显示到前端
        return R.error(exception.getMessage());
    }

}
